# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
# Copyright (c) 2019 MediaTek Inc.
%YAML 1.2
---
$id: http://devicetree.org/schemas/media/i2c/ov8856.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Omnivision OV8856 CMOS Sensor

maintainers:
  - Dongchun Zhu <dongchun.zhu@mediatek.com>

description: |-
  The Omnivision OV8856 is a high performance, 1/4-inch, 8 megapixel, CMOS
  image sensor that delivers 3264x2448 at 30fps. It provides full-frame,
  sub-sampled, and windowed 10-bit MIPI images in various formats via the
  Serial Camera Control Bus (SCCB) interface. This chip is programmable
  through I2C and two-wire SCCB. The sensor output is available via CSI-2
  serial data output (up to 4-lane).

properties:
  compatible:
    const: ovti,ov8856

  reg:
    maxItems: 1

  clocks:
    maxItems: 1

  clock-names:
    description:
      Input clock for the sensor.
    items:
      - const: xvclk

  clock-frequency:
    description:
      Frequency of the xvclk clock in Hertz.

  dovdd-supply:
    description:
      Definition of the regulator used as interface power supply.

  avdd-supply:
    description:
      Definition of the regulator used as analog power supply.

  dvdd-supply:
    description:
      Definition of the regulator used as digital power supply.

  reset-gpios:
    description:
      The phandle and specifier for the GPIO that controls sensor reset.
      This corresponds to the hardware pin XSHUTDOWN which is physically
      active low.

  port:
    $ref: /schemas/graph.yaml#/$defs/port-base
    additionalProperties: false

    properties:
      endpoint:
        $ref: /schemas/media/video-interfaces.yaml#
        unevaluatedProperties: false

        properties:
          data-lanes:
            description: |-
              The driver only supports four-lane operation.
            items:
              - const: 1
              - const: 2
              - const: 3
              - const: 4

          link-frequencies:
            description: Frequencies listed are driver, not h/w limitations.
            maxItems: 2
            items:
              enum: [ 360000000, 180000000 ]

        required:
          - link-frequencies

required:
  - compatible
  - reg
  - clocks
  - clock-names
  - clock-frequency
  - dovdd-supply
  - avdd-supply
  - dvdd-supply
  - reset-gpios
  - port

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        ov8856: camera@10 {
            compatible = "ovti,ov8856";
            reg = <0x10>;

            reset-gpios = <&pio 111 GPIO_ACTIVE_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&clk_24m_cam>;

            clocks = <&cam_osc>;
            clock-names = "xvclk";
            clock-frequency = <19200000>;

            avdd-supply = <&mt6358_vcama2_reg>;
            dvdd-supply = <&mt6358_vcamd_reg>;
            dovdd-supply = <&mt6358_vcamio_reg>;

            port {
                wcam_out: endpoint {
                    remote-endpoint = <&mipi_in_wcam>;
                    data-lanes = <1 2 3 4>;
                    link-frequencies = /bits/ 64 <360000000>;
                };
            };
        };
    };
...
